ডাইনামিক মেমোরি ম্যানেজমেন্ট হলো C++ প্রোগ্রামিংয়ের এমন একটি প্রক্রিয়া, যার মাধ্যমে প্রোগ্রাম চলাকালীন মেমোরি বরাদ্দ (allocation) এবং মেমোরি মুক্ত (deallocation) করা হয়। C++ এ new এবং delete অপারেটর ব্যবহার করে ডাইনামিক মেমোরি ম্যানেজমেন্ট করা যায়।
ডাইনামিক মেমোরি ম্যানেজমেন্টের মাধ্যমে প্রোগ্রামের প্রয়োজন অনুযায়ী মেমোরি বরাদ্দ করা যায় এবং ব্যবহারের পর সেই মেমোরি পুনরায় সিস্টেমে ফিরিয়ে দেওয়া হয়। এটি বিশেষত এমন ক্ষেত্রে কার্যকর, যখন মেমোরির আকার পূর্ব নির্ধারিত থাকে না।
C++ এ ডাইনামিক মেমোরি বরাদ্দ এবং মুক্ত করার জন্য new এবং delete অপারেটর ব্যবহার করা হয়।
new
অপারেটর ব্যবহার করে মেমোরি ডাইনামিক্যালি বরাদ্দ করা হয়। এটি নির্দিষ্ট ডেটা টাইপের জন্য প্রয়োজনীয় মেমোরি বরাদ্দ করে এবং সেই মেমোরির ঠিকানা ফেরত দেয়।
int *ptr = new int; // একটি পূর্ণসংখ্যার জন্য মেমোরি বরাদ্দ
*ptr = 10; // মেমোরি লোকেশনে মান অ্যাসাইন
delete
অপারেটর ব্যবহার করে ডাইনামিক্যালি বরাদ্দ করা মেমোরি মুক্ত করা হয়। এটি পূর্বে বরাদ্দ করা মেমোরিকে সিস্টেমে ফিরিয়ে দেয়, ফলে মেমোরি লিক এড়ানো সম্ভব হয়।
delete ptr; // মেমোরি মুক্ত
#include <iostream>
using namespace std;
int main() {
int *ptr = new int; // একটি পূর্ণসংখ্যার জন্য ডাইনামিক মেমোরি বরাদ্দ
*ptr = 50; // মেমোরি লোকেশনে মান অ্যাসাইন
cout << "Value: " << *ptr << endl;
delete ptr; // মেমোরি মুক্ত
return 0;
}
বর্ণনা:
new int
এর মাধ্যমে একটি পূর্ণসংখ্যার জন্য মেমোরি বরাদ্দ করা হয়েছে এবং delete ptr
এর মাধ্যমে মেমোরি মুক্ত করা হয়েছে।একাধিক মান সংরক্ষণ করতে ডাইনামিক্যালি অ্যারের জন্যও মেমোরি বরাদ্দ করা যায়।
#include <iostream>
using namespace std;
int main() {
int size;
cout << "Enter array size: ";
cin >> size;
int *arr = new int[size]; // অ্যারের জন্য মেমোরি বরাদ্দ
// অ্যারের জন্য মান ইনপুট নেওয়া
for (int i = 0; i < size; i++) {
cout << "Enter value for arr[" << i << "]: ";
cin >> arr[i];
}
// প্রিন্ট করা
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
delete[] arr; // অ্যারের জন্য বরাদ্দকৃত মেমোরি মুক্ত
return 0;
}
বর্ণনা:
size
আকারের একটি অ্যারে ডাইনামিক্যালি বরাদ্দ করা হয়েছে এবং delete[] arr;
দিয়ে অ্যারের জন্য বরাদ্দকৃত মেমোরি মুক্ত করা হয়েছে।delete
ব্যবহার করে মুক্ত করতে হবে।NULL
দিয়ে সেট করা উচিৎ, যাতে তা ড্যাংলিং পয়েন্টার না হয়ে যায়।int *ptr = new int(10);
delete ptr; // মেমোরি মুক্ত
ptr = NULL; // পয়েন্টার NULL করে দেওয়া
C++11 এ স্মার্ট পয়েন্টার নামক একটি ফিচার এসেছে, যা মেমোরি লিক রোধে সাহায্য করে। স্মার্ট পয়েন্টার ব্যবহার করলে delete
দিয়ে মেমোরি মুক্ত করার প্রয়োজন হয় না, কারণ এটি নিজেই মেমোরি ম্যানেজ করে।
shared_ptr
এর দুর্বল কপি, যা মেমোরি লিক এড়ায়।#include <iostream>
#include <memory> // স্মার্ট পয়েন্টার লাইব্রেরি
using namespace std;
int main() {
unique_ptr<int> ptr = make_unique<int>(20); // unique_ptr ব্যবহার করে মেমোরি বরাদ্দ
cout << "Value: " << *ptr << endl;
// delete প্রয়োজন হয় না, স্মার্ট পয়েন্টার নিজে থেকেই মেমোরি মুক্ত করে।
return 0;
}
ডাইনামিক মেমোরি ব্যবহারের সময় সতর্ক থাকা দরকার যাতে মেমোরি লিক বা ড্যাংলিং পয়েন্টারের সমস্যা না হয়, এবং ডাইনামিক মেমোরি ব্যবহারের পর তা অবশ্যই মুক্ত করতে হবে।
ডাইনামিক মেমোরি বরাদ্দ C++ এ এমন একটি পদ্ধতি যার মাধ্যমে প্রোগ্রাম রানটাইমে (program runtime) প্রয়োজন অনুযায়ী মেমোরি বরাদ্দ করতে পারে এবং কাজ শেষে মেমোরি মুক্ত করতে পারে। C++ এ ডাইনামিক মেমোরি বরাদ্দের জন্য new
এবং delete
কীওয়ার্ড ব্যবহার করা হয়।
ডাইনামিক মেমোরি বরাদ্দের প্রধান সুবিধা হলো এটি প্রোগ্রামের মেমোরি ব্যবস্থাপনায় উন্নতি করে এবং প্রোগ্রামকে আরও কার্যকর করে তোলে। উদাহরণস্বরূপ:
new
কীওয়ার্ডnew
কীওয়ার্ড ব্যবহার করে ডাইনামিক মেমোরি বরাদ্দ করা হয়। এটি মেমোরির একটি ব্লক বরাদ্দ করে এবং তার ঠিকানা রিটার্ন করে।
new
কীওয়ার্ড ব্যবহার করে একক মেমোরি বরাদ্দ#include <iostream>
using namespace std;
int main() {
int *ptr = new int; // একটি ইন্টিজার মেমোরি বরাদ্দ
*ptr = 10; // মান সেট করা
cout << "Value: " << *ptr << endl; // Output: Value: 10
delete ptr; // মেমোরি মুক্ত করা
return 0;
}
বর্ণনা:
new int
একটি ইন্টিজারের জন্য ডাইনামিক্যালি মেমোরি বরাদ্দ করে এবং সেই মেমোরির ঠিকানা ptr
পয়েন্টারে সংরক্ষণ করা হয়।*ptr = 10;
দিয়ে ptr
দ্বারা নির্দেশিত মেমোরি লোকেশনে মান ১০ সেট করা হয়েছে।delete ptr;
ব্যবহার করে মেমোরি মুক্ত করা হয়েছে।new
কীওয়ার্ড ব্যবহার করে অ্যারে বরাদ্দ#include <iostream>
using namespace std;
int main() {
int size = 5;
int *arr = new int[size]; // একটি অ্যারের জন্য ডাইনামিক মেমোরি বরাদ্দ
// অ্যারে ইনিশিয়ালাইজ করা
for (int i = 0; i < size; i++) {
arr[i] = i + 1;
}
// অ্যারের মান প্রিন্ট করা
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
delete[] arr; // অ্যারের মেমোরি মুক্ত করা
return 0;
}
বর্ণনা:
new int[size]
ব্যবহার করে ৫টি ইন্টিজার ধারণ করতে সক্ষম একটি অ্যারে বরাদ্দ করা হয়েছে।delete[] arr;
দিয়ে পুরো অ্যারের মেমোরি মুক্ত করা হয়েছে।delete
কীওয়ার্ডdelete
কীওয়ার্ড মেমোরি মুক্ত করার জন্য ব্যবহৃত হয়, যা আগে new
দ্বারা বরাদ্দকৃত মেমোরি রিলিজ করে। delete
মেমোরি লিক প্রতিরোধে সহায়ক, কারণ এটি অব্যবহৃত মেমোরি মুক্ত করে।
delete
ব্যবহার করতে হয়।delete[]
ব্যবহার করতে হয়।delete
না করলে মেমোরি লিক হতে পারে। তাই ব্যবহারের পর মেমোরি অবশ্যই মুক্ত করতে হবে।delete
করার পরও পয়েন্টারের মান রয়ে গেলে এটি ড্যাংলিং পয়েন্টার তৈরি করতে পারে। তাই delete
করার পর পয়েন্টারকে NULL
বা nullptr
করতে হবে।delete
এবং delete[]
এর ব্যবহার: অ্যারে মেমোরি মুক্ত করার জন্য delete[]
ব্যবহার করতে হবে, না হলে সমস্যার সৃষ্টি হতে পারে।#include <iostream>
using namespace std;
int main() {
int *ptr = new int(10); // মেমোরি বরাদ্দ
cout << "Value: " << *ptr << endl;
delete ptr; // মেমোরি মুক্ত
ptr = nullptr; // ড্যাংলিং পয়েন্টার প্রতিরোধ
return 0;
}
বর্ণনা:
delete ptr;
দিয়ে মেমোরি মুক্ত করার পর, ptr = nullptr;
করে পয়েন্টারকে nullptr
এ সেট করা হয়েছে, যাতে ড্যাংলিং পয়েন্টার সমস্যা প্রতিরোধ হয়।#include <iostream>
using namespace std;
int main() {
int n;
cout << "Enter the number of elements: ";
cin >> n;
// ডাইনামিক্যালি অ্যারের জন্য মেমোরি বরাদ্দ
float *data = new float[n];
cout << "Enter elements: ";
for (int i = 0; i < n; i++) {
cin >> data[i];
}
cout << "You entered: ";
for (int i = 0; i < n; i++) {
cout << data[i] << " ";
}
cout << endl;
delete[] data; // অ্যারের মেমোরি মুক্ত করা
return 0;
}
বর্ণনা:
new
ব্যবহার করে অ্যারের জন্য মেমোরি বরাদ্দ করা হয়েছে।delete[] data;
দিয়ে অ্যারের মেমোরি মুক্ত করা হয়েছে।new
এবং delete
এর সুবিধাnew
এবং delete
ব্যবহার করে লিংকড লিস্ট, স্ট্যাক, কিউ প্রভৃতি ডায়নামিক ডেটা স্ট্রাকচার তৈরি করা সহজ।new
এবং delete
এর অসুবিধাdelete
করার পর পয়েন্টার ব্যবহার করলে সমস্যা হতে পারে।delete[]
এবং একক ভ্যারিয়েবলের জন্য delete
ব্যবহার করতে হয়, যা সঠিকভাবে ব্যবহার না করলে সমস্যার কারণ হতে পারে।new
কীওয়ার্ড দিয়ে ডাইনামিক মেমোরি বরাদ্দ করা হয়।delete
কীওয়ার্ড দিয়ে ডাইনামিক মেমোরি মুক্ত করা হয়।new
এবং delete
ব্যবহার করে C++ প্রোগ্রামাররা প্রয়োজনমতো মেমোরি বরাদ্দ ও মুক্ত করে দক্ষতার সাথে মেমোরি ম্যানেজমেন্ট করতে পারেন।
ডায়নামিক অ্যারে হলো এমন একটি অ্যারে, যার আকার প্রোগ্রাম চলাকালীন সময়ে নির্ধারণ করা যায় এবং প্রয়োজন অনুসারে অ্যারের আকার পরিবর্তন করা যায়। C++ এ ডায়নামিক অ্যারে তৈরি করার জন্য new এবং delete অপারেটর ব্যবহার করা হয়।
C++ এ new
অপারেটর ব্যবহার করে ডায়নামিক অ্যারে তৈরি করা যায়, এবং delete[]
অপারেটর দিয়ে ডায়নামিক অ্যারেটি মেমোরি থেকে মুক্ত করা যায়।
#include <iostream>
using namespace std;
int main() {
int size;
cout << "Enter array size: ";
cin >> size;
// ডায়নামিক অ্যারে তৈরি
int *arr = new int[size];
// অ্যারের জন্য মান ইনপুট নেওয়া
cout << "Enter " << size << " elements: ";
for (int i = 0; i < size; i++) {
cin >> arr[i];
}
// অ্যারে প্রিন্ট করা
cout << "Array elements are: ";
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
// মেমোরি মুক্ত করা
delete[] arr;
return 0;
}
বর্ণনা:
size
নামে একটি ভ্যারিয়েবলের মাধ্যমে অ্যারের আকার ইনপুট নেওয়া হয়েছে।new int[size]
দিয়ে একটি ডায়নামিক অ্যারে তৈরি করা হয়েছে, যেখানে size
আকারের অ্যারের জন্য মেমোরি বরাদ্দ করা হয়েছে।delete[] arr;
দিয়ে অ্যারেটির মেমোরি মুক্ত করা হয়েছে।C++ এ ডায়নামিক্যালি বরাদ্দকৃত অ্যারের আকার সরাসরি পরিবর্তন করা সম্ভব নয়। তবে নতুন আকারের জন্য একটি নতুন ডায়নামিক অ্যারে তৈরি করে পুরনো অ্যারেটির মানগুলো নতুন অ্যারেতে কপি করা যায় এবং পুরনো অ্যারে মেমোরি থেকে মুক্ত করা যায়।
#include <iostream>
using namespace std;
int main() {
int size = 3;
int *arr = new int[size];
// প্রাথমিক মান ইনপুট নেওয়া
cout << "Enter 3 elements: ";
for (int i = 0; i < size; i++) {
cin >> arr[i];
}
// নতুন আকারের জন্য একটি বড় অ্যারে তৈরি করা
int newSize = 5;
int *newArr = new int[newSize];
// পুরনো অ্যারের মান নতুন অ্যারেতে কপি করা
for (int i = 0; i < size; i++) {
newArr[i] = arr[i];
}
// নতুন উপাদান যোগ করা
newArr[3] = 40;
newArr[4] = 50;
// পুরনো অ্যারেটির মেমোরি মুক্ত করা
delete[] arr;
// নতুন অ্যারের মান প্রিন্ট করা
cout << "Resized array elements are: ";
for (int i = 0; i < newSize; i++) {
cout << newArr[i] << " ";
}
cout << endl;
// নতুন অ্যারেটির মেমোরি মুক্ত করা
delete[] newArr;
return 0;
}
বর্ণনা:
size = 3
আকারের একটি ডায়নামিক অ্যারে arr
তৈরি করা হয়েছে এবং প্রাথমিক মান ইনপুট নেওয়া হয়েছে।newSize = 5
আকারের একটি নতুন অ্যারে newArr
তৈরি করা হয়েছে এবং arr
এর মানগুলো newArr
এ কপি করা হয়েছে।arr
মেমোরি থেকে মুক্ত করা হয়েছে, এবং newArr
এর নতুন আকারে মানগুলো প্রিন্ট করা হয়েছে।delete[]
অপারেটর ব্যবহার করে সেই মেমোরি মুক্ত করতে হবে, যাতে মেমোরি লিক না হয়।nullptr
বা NULL
দিয়ে সেট করা উচিৎ।C++11 এ স্মার্ট পয়েন্টার ব্যবহার করে ডায়নামিক অ্যারে তৈরি করলে মেমোরি ম্যানেজমেন্ট আরও সহজ হয় এবং মেমোরি লিক এড়ানো যায়। unique_ptr
স্মার্ট পয়েন্টার ব্যবহার করে ডায়নামিক অ্যারে তৈরি করার একটি উদাহরণ নিচে দেওয়া হলো।
#include <iostream>
#include <memory>
using namespace std;
int main() {
int size = 5;
unique_ptr<int[]> arr(new int[size]); // unique_ptr ব্যবহার করে ডায়নামিক অ্যারে
// মান ইনপুট নেওয়া
cout << "Enter 5 elements: ";
for (int i = 0; i < size; i++) {
cin >> arr[i];
}
// মান প্রিন্ট করা
cout << "Array elements are: ";
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0; // unique_ptr এর মেমোরি স্বয়ংক্রিয়ভাবে মুক্ত হয়
}
বর্ণনা:
unique_ptr<int[]>
ব্যবহার করে ডায়নামিক অ্যারে তৈরি করা হয়েছে।unique_ptr
ব্যবহারের ফলে প্রোগ্রাম শেষে মেমোরি স্বয়ংক্রিয়ভাবে মুক্ত হয়ে যায়।new
এবং delete[]
অপারেটর ব্যবহার করে ডায়নামিক অ্যারে তৈরি ও মুক্ত করা হয়।ডায়নামিক অ্যারে মেমোরি ব্যবহারে আরও নিয়ন্ত্রণ প্রদান করে এবং প্রোগ্রামে আরও নমনীয়তা ও কার্যকারিতা যোগ করে।
স্মার্ট পয়েন্টার হলো C++ এর একটি বিশেষ পয়েন্টার ক্লাস, যা C++11 থেকে যোগ করা হয়েছে। স্মার্ট পয়েন্টার প্রোগ্রামারদের জন্য ম্যানুয়াল মেমোরি ব্যবস্থাপনা ছাড়াই মেমোরি ম্যানেজমেন্ট সহজতর করে। স্মার্ট পয়েন্টারগুলি নিজে থেকেই মেমোরি বরাদ্দ ও মুক্ত করতে পারে, যা মেমোরি লিক এবং ড্যাংলিং পয়েন্টার সমস্যা সমাধানে সহায়ক।
C++ এ সাধারণ পয়েন্টার ব্যবহার করলে ডাইনামিক মেমোরি বরাদ্দের পরে delete
বা delete[]
ব্যবহার করে ম্যানুয়ালি মেমোরি মুক্ত করতে হয়। যদি ভুলে মেমোরি মুক্ত করা না হয়, তবে মেমোরি লিক এর সমস্যা দেখা দিতে পারে। স্মার্ট পয়েন্টার এই ধরনের সমস্যার সমাধান করে। এটি নিজে থেকেই মেমোরি মুক্ত করতে সক্ষম, ফলে প্রোগ্রামারকে মেমোরি ব্যবস্থাপনার দিকে কম মনোযোগ দিতে হয় এবং প্রোগ্রাম আরও কার্যকর হয়।
unique_ptr
পয়েন্টার মেমোরির মালিক হতে পারে।shared_ptr
পয়েন্টার মেমোরি ছেড়ে দেয়।shared_ptr
এর জন্য একটি উইক রেফারেন্স ধরে রাখে। এটি মেমোরির মালিকানা ধরে রাখে না, তবে shared_ptr
এর সাথে সংযুক্ত থাকে।unique_ptr
unique_ptr
C++ এর একটি স্মার্ট পয়েন্টার যা শুধুমাত্র একক মালিকানা সমর্থন করে। একবার একটি unique_ptr
মেমোরির মালিকানা নিলে, সেই মেমোরিকে আর অন্য কোনো unique_ptr
ধরে রাখতে পারে না। এটি কেবলমাত্র মুভ করা যায়, কপি করা যায় না।
unique_ptr
ব্যবহার#include <iostream>
#include <memory> // unique_ptr এর জন্য
using namespace std;
int main() {
unique_ptr<int> ptr1 = make_unique<int>(10); // ডাইনামিক্যালি মেমোরি বরাদ্দ
cout << "Value: " << *ptr1 << endl; // Output: Value: 10
// ptr2 = ptr1; // এটি বৈধ নয়, কারণ unique_ptr কপি করা যায় না
unique_ptr<int> ptr2 = move(ptr1); // ptr1 এর মালিকানা ptr2 তে সরানো হয়েছে
if (ptr1 == nullptr) {
cout << "ptr1 is now nullptr." << endl;
}
cout << "Value through ptr2: " << *ptr2 << endl; // Output: Value through ptr2: 10
return 0;
}
বর্ণনা:
make_unique<int>(10)
দিয়ে একটি unique_ptr
তৈরি করা হয়েছে।move(ptr1)
এর মাধ্যমে ptr1
এর মালিকানা ptr2
তে সরানো হয়েছে এবং ptr1
এর মান nullptr
হয়েছে।shared_ptr
shared_ptr
হল একটি স্মার্ট পয়েন্টার যা মেমোরির মালিকানা একাধিক পয়েন্টারের মধ্যে ভাগ করে। shared_ptr
এর রেফারেন্স কাউন্ট থাকে, যা নির্দেশ করে কতগুলি shared_ptr
সেই মেমোরি পয়েন্ট করছে। যখন রেফারেন্স কাউন্ট শূন্য হয়ে যায়, তখন মেমোরি স্বয়ংক্রিয়ভাবে মুক্ত হয়ে যায়।
shared_ptr
ব্যবহার#include <iostream>
#include <memory> // shared_ptr এর জন্য
using namespace std;
int main() {
shared_ptr<int> ptr1 = make_shared<int>(20); // ডাইনামিক্যালি মেমোরি বরাদ্দ
cout << "Value: " << *ptr1 << endl; // Output: Value: 20
cout << "Reference count: " << ptr1.use_count() << endl; // রেফারেন্স কাউন্ট চেক
{
shared_ptr<int> ptr2 = ptr1; // ptr1 এর সাথে ptr2 এর মালিকানা ভাগ করা হচ্ছে
cout << "Reference count after ptr2: " << ptr1.use_count() << endl; // রেফারেন্স কাউন্ট: 2
}
cout << "Reference count after ptr2 goes out of scope: " << ptr1.use_count() << endl; // রেফারেন্স কাউন্ট: 1
return 0;
}
বর্ণনা:
make_shared<int>(20)
ব্যবহার করে একটি shared_ptr
তৈরি করা হয়েছে।ptr2
যখন ptr1
এর সাথে মেমোরি ভাগ করছে, তখন রেফারেন্স কাউন্ট 2
হয়েছে।ptr2
স্কোপের বাইরে চলে যাওয়ার পর রেফারেন্স কাউন্ট 1
এ ফিরে এসেছে।weak_ptr
weak_ptr
একটি shared_ptr
এর জন্য উইক রেফারেন্স প্রদান করে, যা মেমোরির মালিকানা ধরে রাখে না। এটি সাধারণত shared_ptr
এর সাথে মেমোরি ব্যবহারের জন্য ব্যবহৃত হয়, যাতে shared_ptr
এর রেফারেন্স কাউন্ট না বাড়ে এবং মেমোরি ব্যবস্থাপনা সহজ হয়।
weak_ptr
ব্যবহার#include <iostream>
#include <memory>
using namespace std;
int main() {
shared_ptr<int> sharedPtr = make_shared<int>(30); // একটি shared_ptr তৈরি করা
weak_ptr<int> weakPtr = sharedPtr; // একটি weak_ptr দিয়ে sharedPtr কে রেফারেন্স করা
cout << "Shared pointer reference count: " << sharedPtr.use_count() << endl; // Output: 1
if (auto lockedPtr = weakPtr.lock()) { // weak_ptr থেকে shared_ptr তৈরি করা
cout << "Locked pointer value: " << *lockedPtr << endl; // Output: 30
} else {
cout << "weakPtr is expired." << endl;
}
return 0;
}
বর্ণনা:
weakPtr
নামে একটি weak_ptr
তৈরি করা হয়েছে, যা sharedPtr
কে রেফারেন্স করছে।weakPtr.lock()
ব্যবহার করে একটি shared_ptr
তৈরি করা হয়েছে, যা weakPtr
সক্রিয় থাকলে তার মান প্রদর্শন করে।unique_ptr
, shared_ptr
, এবং weak_ptr
এর তুলনাবৈশিষ্ট্য | unique_ptr | shared_ptr | weak_ptr |
---|---|---|---|
মালিকানা | একক মালিকানা | একাধিক মালিকানা | মালিকানা ধরে রাখে না |
রেফারেন্স কাউন্ট | নেই | রেফারেন্স কাউন্ট থাকে | নেই, তবে shared_ptr এর রেফারেন্স ধরে |
কপি করা | কপি করা যায় না, শুধু মুভ করা যায় | কপি এবং মুভ করা যায় | কপি করা যায়, কিন্তু সরাসরি মেমোরি অ্যাক্সেস নয় |
ব্যবহারের উদ্দেশ্য | একক মালিকানা, স্বয়ংসম্পূর্ণ মালিকানার জন্য | একাধিক রেফারেন্স যখন প্রয়োজন | উইক রেফারেন্স, সাইক্লিক ডিপেন্ডেন্স রোধে সহায়ক |
unique_ptr
: একক মালিকানা নিশ্চিত করে, অন্য কোনো পয়েন্টার সেই মেমোরির মালিক হতে পারে না।shared_ptr
: মেমোরি মালিকানা একাধিক পয়েন্টারের মধ্যে ভাগ করে নিতে সক্ষম।weak_ptr
: একটি shared_ptr
এর উইক রেফারেন্স ধরে রাখে, যা মূলত রেফারেন্স কাউন্ট না বাড়িয়ে মেমোরি অ্যাক্সেস করতে দেয়।স্মার্ট পয়েন্টার C++ এ মেমোরি ব্যবস্থাপনা সহজ, নিরাপদ, এবং কার্যকর করে তোলে, যা প্রোগ্রামিংয়ে মেমোরি লিক এবং ড্যাংলিং পয়েন্টার সমস্যার সমাধান প্রদান করে।
common.read_more